home *** CD-ROM | disk | FTP | other *** search
- /* Hex Shortcuts
- * Written Jan 2000 by Allon Stern
- * FREEWARE
- * Feel free to use this code for working your own hacks, or
- * extend the functionality!
- * However, please don't distribute modified versions as "Hex Shortcuts" or
- * under my name.
- * If you have ideas you want me to incorporate into Hex Shortcuts, send me
- * email at allon+palm@radioactive.org
- */
-
-
- #include <Pilot.h>
- #include <SysEvtMgr.h>
- #include <Graffiti.h>
-
- /***********************************************************************
- *
- * Internal Constants
- *
- ***********************************************************************/
- #define kHackFileCreator 'HexS'
- #define kHackCodeID 1000
-
- /***********************************************************************
- *
- * Function Prototypes
- *
- ***********************************************************************/
-
- Err MyGrfGetAndExpandMacro(CharPtr nameP, BytePtr macroDataP, WordPtr dataLenP);
-
- Err MyGrfGetAndExpandMacro(CharPtr nameP, BytePtr macroDataP, WordPtr dataLenP)
-
- {
- Err (*oldtrap)(CharPtr, BytePtr, WordPtr);
- DWord temp; // for the feature manager call type checking
- Err err;
- Byte data = 0;
- int looksRight;
-
- // Get the address of the old routine from HackMaster:
- err = FtrGet(kHackFileCreator,kHackCodeID,&temp);
- ErrFatalDisplayIf(err, "can't get real trap address");
- oldtrap=(Err (*)(CharPtr, BytePtr, WordPtr))temp;
-
- looksRight = true;
- if (nameP[0] != '0')
- looksRight = false;
- if (nameP[1] && nameP[1] != 'x')
- looksRight = false;
- if (nameP[1] && nameP[2] &&
- !((nameP[2] >= '0' && nameP[2] <= '9') || (nameP[2] >= 'a' && nameP[2] <= 'f')))
- looksRight = false;
- if (nameP[1] && nameP[2] && nameP[3] &&
- !((nameP[3] >= '0' && nameP[3] <= '9') || (nameP[3] >= 'a' && nameP[3] <= 'f')))
- looksRight = false;
-
- if (looksRight && nameP[0] && nameP[1] && nameP[2] && nameP[3]) {
- if (nameP[2] >= '0' && nameP[2] <= '9')
- data |= (nameP[2] - '0') << 4;
- else if (nameP[2] >= 'a' && nameP[2] <= 'f')
- data |= ((nameP[2] - 'a') + 0x0A) << 4;
- else return oldtrap (nameP, macroDataP, dataLenP);
-
- if (nameP[3] >= '0' && nameP[3] <= '9')
- data |= (nameP[3] - '0');
- else if (nameP[3] >= 'a' && nameP[3] <= 'f')
- data |= ((nameP[3] - 'a')) + 0x0A;
- else return oldtrap (nameP, macroDataP, dataLenP);
- if (dataLenP) {
- macroDataP[0] = data;
- *dataLenP = 1;
- return 0;
- }
- return oldtrap (nameP, macroDataP, dataLenP);
- }
-
- if (looksRight) {
- return grfErrMacroIncomplete;
- }
-
- return oldtrap (nameP, macroDataP, dataLenP);
- }
-
-
-